It is well-known that computer programs often generate program errors during execution. Typically, when an error occurs, an exception corresponding to the error is thrown, but the exception merely indicates that the error has occurred without providing any additional details that a user (e.g., developer, administrator, programmer, etc.) can use to not only identify the error, but also determine its source to track down the problem and find a solution for it. Thus, a user is required to manually search the program to resolve the error. This process is not only slow, tedious, and costly, but also could result in more errors as it is prone to human error. One conventional way is to use extended stack traces by recording the values of local variables. However, this conventional method of using extended stack traces is not sufficient. For example, in cases of a null exception, extended stack traces cannot indicate which variable (e.g., <write(getBytes( ).length>, <getObject( ).hashCode( )>, etc.) returned a null value by merely providing the values of local variables. Furthermore, extended stack traces impose heavy performance penalties when the exceptions are created.